/*
 *    Copyright 2009-2012 the original author or authors.
 *
 *    Licensed under the Apache License, Version 2.0 (the "License");
 *    you may not use this file except in compliance with the License.
 *    You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 *    Unless required by applicable law or agreed to in writing, software
 *    distributed under the License is distributed on an "AS IS" BASIS,
 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *    See the License for the specific language governing permissions and
 *    limitations under the License.
 */

/**
 * Mybatis作为ORM，实现了对象与关系数据库间的映射。Mybatis中的映射包含两个方面：
 * <p>
 * 1.将对象中的值(parameterType所指定的对象)映射到具体的sql中，例如：
 * <insert id="insertAuthor" parameterType="domain.blog.Author">
 * insert into Author (id,username,password,email,bio)
 * values (#{id},#{username},#{password},#{email},#{bio})
 * </insert>
 * <p>
 * <p>
 * 2.将查询出来的结果填充到具体的对象属性中（由resultMap/resultType指定），例如：
 *
 * <select id="selectPerson" parameterType="int" resultType="hashmap">
 * SELECT * FROM PERSON WHERE ID = #{id}
 * </select>
 * <p>
 * <p>
 * 在使用mybatis时这些传值的对象基本上都是POJO，
 * 传入的时候（从对象到sql）就是读对象的属性（调用对象的get/is方法），
 * 传出的时候（从sql到对象）就是set对象的属性（调用对象的set方法）。
 * 这两种的实现主要是基于Java 的反射机制进行的，只是Mybatis为了更好的满足自己的需要，
 * 结合自己的特点进行了二次封装，本文将介绍mybatis的reflection包。
 * 为方便介绍，我们默认下面提到的对象都是POJO类型的。
 */
package org.apache.ibatis.reflection;
